package com.luckcoder.relax.games.domain.dto;

import lombok.Data;
import java.util.List;
import java.time.LocalDateTime;

/**
 * 用户游戏统计数据
 *
 * @author zhanghao
 * @date 2025-09-11
 */
@Data
public class UserGameStats {
    
    /**
     * 游戏编码
     */
    private String gameCode;
    
    /**
     * 总游戏次数
     */
    private Integer totalPlayCount;
    
    /**
     * 最高分数
     */
    private Long bestScore;
    
    /**
     * 累计分数
     */
    private Long totalScore;
    
    /**
     * 平均分数
     */
    private Double avgScore;
    
    /**
     * 累计游戏时长（秒）
     */
    private Integer totalPlayTime;
    
    /**
     * 平均游戏时长（秒）
     */
    private Double avgPlayTime;
    
    /**
     * 累计消灭数量
     */
    private Integer totalEliminatedCount;
    
    /**
     * 最高连击数
     */
    private Integer maxCombo;
    
    /**
     * 最后游戏时间
     */
    private LocalDateTime lastPlayTime;
    
    /**
     * 首次游戏时间
     */
    private LocalDateTime firstPlayTime;
    
    /**
     * 完成游戏次数
     */
    private Integer completedCount;
    
    /**
     * 超时游戏次数
     */
    private Integer timeoutCount;
    
    /**
     * 退出游戏次数
     */
    private Integer quitCount;
    
    /**
     * 个人emoji消灭统计（前10名）
     */
    private List<PersonalEmojiStat> topEmojiStats;
    
    /**
     * 近期游戏记录（最近10局）
     */
    private List<RecentGameRecord> recentRecords;
    
    /**
     * 个人emoji统计项
     */
    @Data
    public static class PersonalEmojiStat {
        /**
         * Emoji字符
         */
        private String emojiChar;
        
        /**
         * 消灭次数
         */
        private Long eliminatedCount;
        
        /**
         * 占总消灭数的百分比
         */
        private Double percentage;
        
        /**
         * 最后消灭时间
         */
        private LocalDateTime lastEliminatedTime;
    }
    
    /**
     * 近期游戏记录项
     */
    @Data
    public static class RecentGameRecord {
        /**
         * 记录ID
         */
        private Long recordId;
        
        /**
         * 游戏得分
         */
        private Long score;
        
        /**
         * 游戏时长
         */
        private Long playTime;
        
        /**
         * 消灭数量
         */
        private Long eliminatedCount;
        
        /**
         * 游戏结果
         */
        private String gameResult;
        
        /**
         * 游戏时间
         */
        private LocalDateTime gameTime;
    }
}